// request.js用来封装统一的请求方法

import store from '@/store'
import router from '@/router'
// 下载并导入axios
import axios from 'axios'

// 设置基准路径
const baseURL = 'http://pcapi-xiaotuxian-front-devtest.itheima.net/'
// 生成instance实例,设置请求的根路径和超时设置
const instance = axios.create({
  baseURL: baseURL,
  timeout: 5000
})
// 请求拦截器-用来添加请求头
instance.interceptors.request.use((config) => {
  const token = store.state.user.profile.token
  if (token) {
    // 如果能获取到token,添加请求头
    config.header.Authorization = 'Bearer ' + token
  }
  return config
}, (err) => {
  return Promise.reject(err)
})
// 响应拦截器-1用来处理数据 2用来处理token失效
instance.interceptors.response.use((res) => {
  return res.data
}, (err) => {
  if (err.response && err.response.state === 401) {
    // 清除token
    store.commit('user/setUser', {})
    // 跳转回登录页
    router.push('/login')
  }
  return Promise.reject(err)
})
// 导出请求方式
export default (options) => {
  return instance({
    url: options.url,
    method: options.method,
    // ES6中规定,对象中的键名可以是动态的
    [options.method.toUpperCase() === 'GET' ? 'params' : 'data']: options.data
  })
}
